#ifndef __6C8203E4_5139_4499_89C3_E8C562A7AE68__
#define __6C8203E4_5139_4499_89C3_E8C562A7AE68__

#include "../import/head.h"
#include "../tools/head.h"
#include "../thread/head.h"
#include "../buf/head.h"
#include "aio_key.h"

/////////////////////////////////////////////////////////////////////////////////////////
// 

namespace xos
{
    class aio_callback_thread;
    class aio_epoll_notify;
    class aio_thread;

    // 
    // aio_impl
    // 
    class aio_impl : public xos_stl::mem_pool_item< aio_impl, thread_lock >,
        public i_aio
    {
    public:
        aio_impl();
        ~aio_impl();

    public:
        // 
        // parameters
        // 
        aio_callback_thread * m_pCallbackThread;
        i_runnable * m_pCallback;
        i_callback * m_pCallbackObj;
        aio_thread * m_pAioThread;

        // 
        // epoll notify.
        // 
        aio_epoll_notify * m_pEpollNotify;
        msg_impl::LIST m_request_list;

        // 
        // data pool
        // 
        aio_key::POOL m_key_pool;

        int m_nEpollSize;
        int m_hEpoll;
        int m_nTimeout;

    public:
        int init();
        int term();

    public:
        // 
        // set callback. 
        // 
        int set_callback( i_callback * pCallbackThread, i_runnable * pCallback );

        // 
        // aio request
        // 
        // m_nData[0] : enumAioType
        // 
        int post_request( i_msg * lpRequest );

        // 
        // release
        // 
        int release();
    };
} // xos

#endif // __6C8203E4_5139_4499_89C3_E8C562A7AE68__
